home *** CD-ROM | disk | FTP | other *** search
- /*
- * Copyright (c) 1992, 1993 Silicon Graphics, Inc.
- *
- * Permission to use, copy, modify, distribute, and sell this software and
- * its documentation for any purpose is hereby granted without fee, provided
- * that (i) the above copyright notices and this permission notice appear in
- * all copies of the software and related documentation, and (ii) the name of
- * Silicon Graphics may not be used in any advertising or publicity relating
- * to the software without the specific, prior written permission of
- * Silicon Graphics.
- *
- * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
- * ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION,
- * ANY WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
- *
- * IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR ANY SPECIAL, INCIDENTAL,
- * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER
- * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF
- * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
- Toogl (TO OpenGL) is a program to translate Iris GL programs into OpenGL
- programs.
-
- Usage: toogl [-clLqwv] < infile > outfile
- -c don't put comments with OGLXXX into program
- -l don't translate lighting calls (e.g. lmdef, lmbind, #defines)
- -L translate lighting calls for emulation library (mylmdef, mylmbind) (implies -l)
- -q don't translate event queue calls (e.g. qread, setvaluator)
- -v print revision number.
- -w don't translate window manager calls (e.g. winopen, mapcolor)
-
- Typical usage might be like this:
-
- #!/bin/sh
- mkdir OpenGL
- for i in *.c
- do
- echo $i
- toogl < $i > OpenGL/$i
- done
-
- You should most definitly KEEP YOUR ORIGINAL SOURCE. Use a directory
- like the above shell script or use RCS:
-
- #!/bin/sh
- for i in *.c
- do
- ci -fm"check in for toogl" $i < /dev/null
- co -lp $i | toogl > $i
- done
-
-
- That's it. It's a filter that scans each line of infile looking for
- IrisGL stuff. When it finds an IrisGL function, it replaces it with the
- corresponding OpenGL function(s). It attempts to fix up arguments where
- it can. Many IrisGL #defines from gl.h are also translated into
- equivalent OpenGL defines where possible. You will need to edit the
- results and probably use gdiff to figure things out.
-
- Any time toogl does something that I thought you might need to look at,
- check, or change, it outputs a comment with "OGLXXX" in it. These come
- out before the line in question and you may search for them with your
- editor. Use the -c option if you don't want the comments.
-
- Toogl can help with translation of lighting commands (lmdef, lmbind,
- and data structures), but it's not perfect. The -L option will cause
- toogl to translate lmdef and lmbind into commands for the emulation
- library in irisgl_light.c
-
- Toogl goes wild on sections of code where you make window manager,
- window configuration, device, and event calls. You're going to have to
- re-write these yourself until some compatibility library comes along.
- Using the -w and -q options will leave this code alone so you can still
- read it to translate it manually.
-
- Toogl understands a little about matching parentheses and quotes:
-
- v3f( v[strlen(strcat(foo, "foo("))] );
-
-
- translates into:
-
- glVertex3fv( v[strlen(strcat(foo, "foo("))] );
-
-
- PROBLEMS:
-
- 1) Toogl expects to find the matching parentheses or quotes ON THE SAME LINE
- as the IrisGL function:
-
- v3f( foo
- );
-
- won't work. This will probably generate an warning message and the function
- won't be changed.
-
-
- 2) Toogl expects to find only <space> and <tab> characters between the
- function name and the '(':
-
- v3f
- (foo);
-
- will be left un-changed, as will:
-
- v3f /* comment */ (foo);
-
-
- 3) C comments inside the argument list of a function shouldn't contain
- parentheses or quote characters. e.g:
-
- v3f ( foo /* I really mean bar "-) */ );
-
- will generate a warning and be un-changed.
-
-
- 4) "Gets" in IrisGL were of the form:
-
-
- int getthing();
-
- int getthings( int *a, int *b);
-
- and y'all write code like:
-
- thing = getthing();
-
- if(getthing() == THING) {
- }
-
- getthings (&a, &b);
-
- "Gets" in OpenGL are of the form:
-
- void glGetIntegerfv(NAME_OF_THING, &thing);
-
- Toogl does the best it can:
-
- i = getcolor();
-
- getdepth(&near, &far);
-
- will translate into:
-
-
- /* OGLXXX
- * getshade:
- * GLint gctmp;
- */
- i = (glGetIntegerv(GL_CURRENT_INDEX, &gstmp), gstmp);
-
- /* OGLXXX You can probably do better than this. */
- {
- int get_depth_tmp[2];
- glGetIntegerv(GL_DEPTH_RANGE, get_depth_tmp);
- *(&near) = get_depth_tmp[0];
- *( &far) = get_depth_tmp[1];
- };
-
-
- 5) "lmdef" and "texdef" are close to impossible to deal with. The parameter lists
- are translated and commented and the function calls are mangled. See the
- -l and -L options for lighting. No such code currently exists for texture.
-
- 6) Toogl does all the translation on ONE LINE. I've re-formatted the stuff above
- to make it readable. The comments do come out as shown. You may want to use cb.
- If you do, you may want to "cb" your code before using toogl, so gdiff
- will only show changes due to toogl and not ones due to cb. Note that cb
- isn't perfect, either.
-
- 7) This space intentionally left almost blank.
-
- 8) (BUG) stuff inside quotes and comments is scanned, too.
-
- printf("scale (reason %d)", reason);
-
- causes a non-fatal error message. (Looks like a call to scale with one argument).
-
- 9) You'll need to change #include <gl.h> into #include <GL/gl.h>
- This sed script may be of help:
-
- sed -e 's@^#[ ]*include[ ]*[<"][^">]*[/]*gl.h[">]@#include "GL/gl.h"@' < in > out
- ^^ tab ^^ tab
-
- 10) There is 1 warning message during compilation: optimization won't
- help this routines that are too big.
-
- 11) (BUG) toogl translates stuff in comments and likely screws up the comment
- in the process:
-
-
- /*
- i = getcolor();
- */
-
-
- (incorrectly) translates into:
-
-
- /*
- /* OGLXXX
- * getshade:
- * GLint gctmp;
- */
- i = (glGetIntegerv(GL_CURRENT_INDEX, &gstmp), gstmp);
- */
-
-